package com;

import ch.qos.logback.classic.db.DBHelper;
import com.Bean.Car;
import com.Bean.Pet;
import com.Bean.User;
import com.Config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import({User.class, DBHelper.class})
public class MainApplication {
    public static void main(String[] args) {
        //1、返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2、查看容器里面的组件
//        String[] names = run.getBeanDefinitionNames();
//        for (String name : names) {
//            System.out.println(name);
//        }

//        //3、从容器中获取组件
//        Pet tom01 = run.getBean("tom", Pet.class);
//        Pet tom02 = run.getBean("tom", Pet.class);
//        System.out.println("组件："+(tom01 == tom02));
//        System.out.println(tom01.getName());
//
//        User user011 = run.getBean("user01",User.class);
//        User user012 = run.getBean("user01", User.class);
//        System.out.println("user011 == user02 ??" +(user012== user011));
//
//
//        //4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$51f1e1ca@1654a892
//        MyConfig bean = run.getBean(MyConfig.class);
//        System.out.println(bean);
//
//        //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
//        //保持组件单实例
//        User user = bean.user01();
//        User user1 = bean.user01();
//        System.out.println(user == user1);
//
//        Pet tom011 = bean.tomcatPet();
//        Pet tom022 = bean.tomcatPet();
//        System.out.println("组件："+(tom011 == tom022));
//
//        User user01 = run.getBean("user01", User.class);
//        Pet tom = run.getBean("tom", Pet.class);
//
//        System.out.println("用户的宠物："+(user01.getPet() == tom));
//
////        5、获取组件
//        String[] beanNamesForType = run.getBeanNamesForType(User.class);
//        System.out.println("======");
//        for (String s : beanNamesForType) {
//            System.out.println(s);
//        }
//
//        DBHelper bean1 = run.getBean(DBHelper.class);
//        System.out.println(bean1);

//        boolean tom = run.containsBean("tom");
//        System.out.println("容器中Tom组件："+tom);//false
//
//        boolean user01 = run.containsBean("user01");
//        System.out.println("容器中user01组件："+user01);//true
//
//        boolean tom22 = run.containsBean("tom22");
//        System.out.println("容器中tom22组件："+tom22);//true

//        boolean haha = run.containsBean("haha");
//        boolean hehe = run.containsBean("hehe");
//        System.out.println("haha："+haha);//true
//        System.out.println("hehe："+hehe);//true

        Car bean = run.getBean(Car.class);
        System.out.println(bean);
    }
}
